A data storage devices typically includes multiple storage locations, each corresponding to one or more memory cells. For certain types of memory, such as flash memory, each memory cell may operate as a single level cell (SLC) which can store a single bit or may operate as a multilevel cell (MLC) which can store multiple bits. Since an MLC can store multiple bits, it is more memory efficient to store data in the MLC than in an SLC. For example, if the MLC is a triple level cell (TLC), a single TLC can store three bits, whereas a single SLC can only store one bit.
Generally, it is more energy efficient to write all of the bits to be stored in an MLC at the same time (e.g., in a single write operation). To illustrate, all three bits that are to be stored at a TLC may be written at the same time by programming the TLC to a state that represents all three bits. Thus, while a single programming operation may be used to store a word in a word line of SLC memory, a single programming operation may be used to store three words in various logical pages of a word line of a TLC.
A memory controller coupled to the memory may determine whether to store particular data at an SLC memory portion or at an MLC memory portion. For example, data may be buffered at a volatile memory of the memory controller to enable a determination of whether the data is part of a long write (e.g., multiple related words) or a short write (e.g., a single word). When it is not clear to the memory controller whether particular data should be written to the MLC, the memory controller may write the particular data to the SLC and subsequently copy the particular data to the MLC after determining that the particular data should be written to the MLC. Thus, multiple programming operations may be used to store the particular data at the MLC (at least one to write the data to the SLC and another to write the data to the MLC). Additionally, a significant portion of the SLC memory may be used to store data that is to be copied to the MLC. Thus, when the above described process is used, the SLC may be oversized to accommodate data that will eventually be stored at the MLC. Further, volatile memory in the memory controller is expensive. Thus, providing sufficient volatile memory in the memory controller to store data until a determination can be made whether to store the data at the SLC or at the MLC is costly.